//
//  base.h
//  Dungeons and Princesses
//
//  Created by John Grange on 10/6/11.
//  Updated by Nick James, Devin Manno, Thomas Nguyen
//  Last Updated: 10/19/2011
//  Copyright (c) 2011 SD Networks. All rights reserved.
//
//  Base class for all objects in the game, please inherit this class and create the base class for your type of object, or objects,
//  then create the actual class for the individual objects: ie. base->objects->weapon, or base->room (might only need one level).
//  Lets try and make this as re-usuable as possible.
//
//  Modfied static intiaitlizer, removed classname

#ifndef Dungeons_and_Princesses_base_h
#define Dungeons_and_Princesses_base_h
#include <iostream>
#include <string>

class Base {

private:
    int objectID;      		// The unquie ID of the object in the game
    std::string description;   	// This should contain the description of your object
    std::string objectType;     // This is the objectType;

    //todo: when we save, save the current idCounter so that when we re-load the game we can restore the last idCounter used to prevent duplicate id values
    static int next_ID;         // used to generate objectIDs (optional). Must increment if used.

    // return the next ID so that it is unique
    static int next_user_id() {
        next_ID++;
        return next_ID;
    }

public:

    // getters
    virtual int getObjectID()const;              // return the object objectID
           
    
    virtual std::string getDesc()const;          // return the description

    
    virtual std::string getObjectType()const;    // return the object type


    // constructor
    // when object is created, auto-assign a new objectID number. ObjectID
    // we must pass the type of object
    Base(std::string typeOfObject); 
    Base();
    virtual ~Base();
protected:
    // setters
    //virtual void setObjectID(int oID) = 0;		// set the object objectID
    //virtual void setDesc(std::string desc) = 0;	// set the description
    virtual void setObjectID(int oID);		// set the object objectID
    virtual void setDesc(std::string desc);	// set the description
    virtual void setObjectType(std::string newObjectType);

};

#endif

